

def str_prominent(str):
    """突出显示字符"""
    return f'{"-" * 30} {str} {"-" * 30} '


def format_filename(filename):
    """获取文件名"""
    filename = filename.replace('\\', '/').split('/')[-1]
    return filename

def subprocess_real_time_output(stdout,printLine=True,delete_unnecessary_lines=True):
    """
      实时输出子进程的stdout流。

      该函数用于实时处理并输出子进程的stdout流，同时可以选择性地打印每一行输出。

      参数:
      - stdout: 子进程的stdout流，类型通常为文件对象。
      - printLine: 布尔值，指示是否应该实时打印stdout中的每一行，默认为True。

      返回:
      - 返回一个字符串，包含子进程stdout流中的所有输出。
      """
    lines = []
    for line in iter(stdout.readline, ''):
        lines.append(line)
        if printLine:print(line , end='');
        # strIndex = line.find('\033')
        # if strIndex != -1:
        # print("033")
        # print(line[strIndex:len(line)])

    #删除多余的行,如maven中的 Progress (1): 5.5/102 kB
    if delete_unnecessary_lines: download_logs_handle(lines);
    return ''.join(lines)

def download_logs_handle(lines):
    count= len(lines)
    i = 0
    while i < count-3:
        #删除多余的换行符
        line = lines[i].replace("\r", "")
        # 如果数组中字符串存在Download开头的, 而下面两行都是 Progress开头的, 则删除第二行
        if line.startswith('Download'):
            if lines[i+1].startswith('Progress') and lines[i+2].startswith('Progress'):
                del lines[i+1]
                count -= 1
                continue
        i += 1

